import { formatTime } from "../../utils/util";
import { request } from "../../request/index";
Page({
  data: {
    // 本局宫格数、对应数字
    number:[],
    // 游戏基本信息
    gameInfo:{},
    // 开始游戏倒计时板块
    countDownBox:false,
    // 存储准备开始计时器
    preTime:null,
    // 倒计时
    preStartTime:3,
    // 存储游戏时间计时器
    timer:null,
    // 游戏用时
    time:0,
    // 存储游戏状态
    flag:true,
    // 底部功能按钮文字
    btnText:'暂停',
    // 玩家点击错误的格子样式
    errActive:'',
    // 玩家正确点击的格子样式
    yesActive:[],
    // 记录点击
    userClick:0,
    // 控制游戏结算面板
    gameEnd:false,
    // 新游戏
    newNumber:null,
    // 控制遮罩层
    isMask:false,
    // 排名信息
    scoreToast:'再接再厉 力争上游'
  },
  // 页面加载拿到参数直接获取随机数
  onLoad: function ({number}) {
    this.setData({
      newNumber:number
    })
    // 调用方法获取对应模式游戏数字
    this.randomNumber(number);
    // 得出本局游戏展示基本信息
    let gameInfo = number == 9 ? {title:'3*3',gridStyle:'nine'} : number == 16 ? {title:'4*4',gridStyle:'sixteen'} : number == 25 ? {title:'5*5',gridStyle:'twentyFive'} : {title:'6*6',gridStyle:'thirtySix'};
    // 存入data备用
    this.setData({
      gameInfo
    });
    // 倒计时准备开始游戏
    this.prepareTime();
  },
  // 随机获取数字
  randomNumber(n) {
    // 存储最终数字
    let number = [];
    // 存储状态
    let yesActive = [];
    // 拿到任意位置不重复的数字
    while (number.length < n) {
      let num = parseInt(Math.random() * n) + 1
      if (number.indexOf(num) == -1) {
        number.push(num);
        yesActive.push(false);
      }
    }
    // 存储数字
    this.setData({
      number,
      yesActive
    })
  },
  // 准备开始游戏
  prepareTime(){
    this.setData({
      countDownBox:true
    })
    let countDown = 1;
    clearInterval(this.data.preTime);
    this.data.preTime = setInterval(() => {
      if(countDown === 3){
        clearInterval(this.data.preTime);
      }
      this.setData({
        preStartTime:this.data.preStartTime - 1,
      })
      countDown++
    },1000);
    // 倒计时结束后开始记时
    this.thisGameDuration();
  },
  // 计算本局游戏时长
  thisGameDuration(){
    setTimeout(() => {
      this.setData({
        countDownBox:false,
        time:this.data.time += 1
      })
      this.thisDuration();
    }, 3000);
  },
  // 计算本局游戏时长分支
  thisDuration(){
    // clearInterval(this.data.timer);
    this.data.timer = setInterval(() => {
      this.setData({
        time:this.data.time += 0.01
      })
    }, 10);
  },
  // 游戏暂停/开始
  btnSwitch(){
    if(this.data.flag) {
      this.setData({
        flag:false,
        btnText:'继续',
        isMask:true
      })
      return clearInterval(this.data.timer);
    }
    this.setData({
      flag:true,
      btnText:'暂停',
      isMask:false
    })
    this.thisDuration();
  },
  // 每次点击选项触发的
  userOptionFn(e){
    let {index,number} = e.target.dataset;
    let num = this.data.number;
    num.sort((a,b) => a - b)
    let userClick = this.data.userClick;
    if(number === num[userClick]) {
      let yesArr = this.data.yesActive;
      yesArr[index] = true;
      this.setData({
        userClick:++userClick,
        yesActive:yesArr
      })
      if(userClick === num.length) {
        clearInterval(this.data.timer);
        this.setData({
          gameEnd:true,
          isMask:true
        })
        // 存储此场游戏记录
        const {nickName,avatarUrl} = wx.getStorageSync('userInfo');
        const history = wx.getStorageSync('history') || [];
        let gameHistory = formatTime(new Date());
        let time = parseFloat(this.data.time.toFixed(2))
        wx.setStorageSync('history', [{time,avatarUrl,nickName,gameHistory},...history]);
        let {gridStyle} = this.data.gameInfo;
        let scoreType = gridStyle === 'nine' ? 3 : gridStyle === 'sixteen' ? 4 : gridStyle === 'twentyFive' ? 5 : gridStyle === 'thirtySix' ? 6 : '';
        // 发起请求
        request({
          url:'gameRecord',
          method:'POST',
          data:{"score":time,"avatarUrl":avatarUrl,"nickName":nickName,"scoreType":scoreType}
        });
        // 超越人数
        this.beyondTheNumber(time,scoreType);
      }
    } 
    else this.setData({
      errActive:index
    })
    setTimeout(() => {
      this.setData({
        errActive:''
      })
    }, 100);
  },
  // 新游戏
  startNewGame({target}){  
    // 重置值 
    this.setData({
      time:0,
      number:[],
      userClick:0,
      yesActive:[],
      isMask:false,
      gameEnd:false,
      preStartTime:3
    })
    // 调用load开始游戏
    this.onLoad(target.dataset)
  },
  // 超越人数
  async beyondTheNumber(time,scoreType){
    // 请求计算打败多少人
    const {data} = await request({
      url:`getRecord/${scoreType}`,
    });
    // let sumPeople = data.length;
    let count = 0;
    data.forEach(v => {
      if(time < v.score){
        count++;
        let scoreToast = count === 1 ? '您打败了第10名' : count === 2 ? '您打败了第9名' : count === 3 ? '您打败了第8名' : count === 4 ? '您打败了第7名' : count === 5 ? '您打败了第6名' : count === 6 ? '您打败了第5名' : count === 7 ? '您打败了第4名' : count === 8 ? '您打败了第3名' : count === 9 ? '您打败了第2名' : count === 10 ? '您打败了第1名' : '得分异常';
        this.setData({
          scoreToast
        })
      }
    }); 
  },
  // 分享
  onShareAppMessage: function () {
    console.log('111');
  }
})